home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 28
/
Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso
/
Aminet
/
hard
/
hack
/
i2clib40.lha
/
i2clib40
/
src
/
SendI2C.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-08-02
|
2KB
|
66 lines
/* SendI2C.c:
* Send bytes supplied in the command line arguments over the I²C bus,
* using i2c.library. Usage:
* SendI2C <bus address> <data> [<data> [...] ]
* where <data> are an arbitrary number of hex digits, in groups of
* 1, 2, 3 or 4 byte.
*/
#include <stdio.h>
#include <stdlib.h>
#include <proto/exec.h>
#include <proto/i2c.h>
#include <libraries/i2c.h>
struct Library *I2C_Base;
int main(int argc, char *argv[])
{
int result=0;
UBYTE adr, i2cdata[ 1000 ];
UWORD i, j, bytes=0;
ULONG l, err;
if( argc<3 )
{
printf( "Usage: \e[2m%s <addr> <data>\e[0m, ", argv[0] );
printf( "e.g. %s 70 0027 065b 4f66\n", argv[0] );
return 5;
}
adr = strtoul( argv[1], NULL, 16 );
for( i=2; i<argc; i++ )
{
j = strlen(argv[ i ]);
if( j & 1 )
{
if( j>1 )
printf("Warning: odd-length hex number %s\n", argv[i]);
j++;
}
l = strtoul( argv[ i ], NULL, 16 );
j *= 4;
while( j>0 )
{
j -= 8;
i2cdata[ bytes++ ] = (l >> j) & 0xff;
}
}
I2C_Base = OpenLibrary( "i2c.library", 39 );
if( !I2C_Base )
{
printf( "Can't open i2c.library V39+\n" );
return 10;
}
err = SendI2C(adr, bytes, i2cdata);
if( (err & 0xff)==0 )
{
printf("I²C failure: \e[1m%s\e[0m\n", I2CErrText(err) );
result = 10;
}
CloseLibrary(I2C_Base);
return result;
}